﻿using MyCode.Project.Domain.Businesses.Sms;
using MyCode.Project.Domain.Businesses.WorkProcess;
using MyCode.Project.Domain.Message.Request.Goods;
using MyCode.Project.Domain.Message.Response.Common;
using MyCode.Project.Domain.Message.Response.Goods;
using MyCode.Project.Domain.Model;
using MyCode.Project.Infrastructure.Common;
using System;
using System.Collections.Generic;

namespace MyCode.Project.Services
{
    public interface IWorkProcessAsyncService
    {

        /// <summary>
        /// 添加短信通知调度。数据内容：参考<see cref="ISmsService"/>
        /// </summary>
        /// <typeparam name="T">通知模板基类</typeparam>
        /// <param name="data">短信通知数据</param>
        void AddSmsNotificationProcess<T>(SmsNotificationData<T> data) where T : SmsTemplateBase;


        /// <summary>
        /// 添加微信通知调度。数据内容：参考<see cref="IWechatNotificationService"/>
        /// </summary>
        /// <typeparam name="T">通知模板基类</typeparam>
        /// <param name="data">微信通知数据</param>        
        void AddWechatNotificationProcess<T>(WechatNotificationData<T> data) where T : NotificationTemplateBase;

        /// <summary>
        /// 通过调度执行发送消息给会员的方法
        /// </summary>
        /// <param name="id"></param>
        void SendSmsTask(string id);

        /// <summary>
        /// 重试发送失败的消息
        /// </summary>
        void RetrySenSms();

        /// <summary>
        /// 根据店员端小程序的服务通知消息模板ID列表
        /// </summary>
        /// <returns></returns>
        /// <exception cref="BaseException"></exception>
        List<TypeValue> GetTemplateMessageList(string clerkAppId = null);

    }
}
